有些情境,需要把某些資料儲存在手機本地,寫過存取檔案或 SharePreference,但他實際儲存在哪裡?可以查看檔案內容嗎?
開啟開發人員模式,就能用 Device Explore 存取手機裡面的檔案。例如,直接從手機抓出截圖、將檔案直接放到手機的資料夾。
而 SharePreference 的背後其實也是寫檔,今天就一併介紹檔案儲存位置了。
/data/data/[APP Package Name]
,這就是 APP 的資料夾。需要特別注意的是,APP 需要是 debuggable。完整 Demo 專案 Github: https://github.com/dreambo4/Restful-Api-Demo-Todo-Project
首先我們先測試寫入 SharePreference
class MainActivity : BaseActivity<ActivityMainBinding>() {
// SharePreference 物件
private val sharedPreferences: SharedPreferences by lazy {
getSharedPreferences("app_prefs", Context.MODE_PRIVATE)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val defaultBaseUrl = "http://192.168.0.12:8080/"
// 取得已儲存的 SharePreference
var newBaseUrl = sharedPreferences.getString("base_url", defaultBaseUrl) ?: defaultBaseUrl
sharedPreferences.edit().putString("base_url", newBaseUrl).apply()
binding.apply {
etBaseUrl.setText(newBaseUrl)
etBaseUrl.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
newBaseUrl = s.toString()
// 使用者編輯過的話,就儲存 SharePreference
sharedPreferences.edit().putString("base_url", newBaseUrl).apply()
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
})
}
}
}
可以發現 SharePreference 的檔名,就是先前寫在 getSharedPreferences("app_prefs", Context.MODE_PRIVATE)
的名稱。並且也能用 key 存取 value 內容。
sharedPreferences.edit().putString("base_url", newBaseUrl)
sharedPreferences.getString("base_url", defaultBaseUrl)